home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #21 (1994-01-12)(Diesel)(DE)[WB].zip / Purity #21 (1994-01-12)(Diesel)(DE)[WB].adf / PCQ-Dokus / Utils(Include).Anl < prev    next >
Text File  |  1993-12-13  |  37KB  |  1,207 lines

  1.  
  2.  
  3.  
  4.                              INCLUDE/UTILS
  5.                              =============
  6.  
  7. Hinweise des Übersetzers:
  8. - um die Funktionen und Prozeduren eines Include-Files zu benutzen, muß
  9.     {$I "Laufwerk:Verzeichnis/Name"}
  10.   verwendet werden. Ein Beispiel:
  11.     {$I "Include:Utils/Break.i"}
  12.   erlaubt die benutzung einer Funktion wie
  13.     BooleanVariable := CheckBreak;
  14.   In BooleanVariable steht dann TRUE, falls Ctrl-C gedrückt wurde, und
  15.   FALSE, wenn nicht. Eine andere Möglichkeit der Verwendung wäre
  16.     IF CheckBreak THEN exit;
  17.   Wurde Ctrl-C gedrückt, bricht das Programm ab.
  18. - die in den einzelnen Kapiteln angegebenen Include-Files werden automatisch
  19.   von den angegebenen Include-Files geladen. Gibt man in einem Programm z.B.
  20.     {$I "Include:Utils/BuildMenu.i}
  21.   an, wird automatisch auch die Include-Datei
  22.     {$I "Include:Intuition/Intuition.i}
  23.   geladen, d.h. dies muß nicht nochmals angegeben werden
  24.  
  25.  
  26.  
  27. INHALTSVERZEICHNIS
  28. ^^^^^^^^^^^^^^^^^^
  29.  
  30. Include-Datei           Kurzbeschreibung                       Zeile
  31.  
  32.  1. Break.i ........... Unterbrechung ........................   55
  33.  2. BuildMenu.i ....... Interface zum Menüsystem .............   89
  34.  3. ConsoleIO.i ....... Console-Ein/Ausgabe ..................  175
  35.  4. ConsoleUtils.i .... Console-Utils (console.device) .......  210
  36.  5. CRT.i ............. einige CRT-Routinen ..................  246
  37.  6. DateTools.i ....... Datum-Tools ..........................  375
  38.  7. DeadKeyConvert.i .. DeadKey-Konvertierung ................  469
  39.  8. DOSUtils.i ........ DOS-Utils ............................  493
  40.  9. DoubleBuffer.i .... einfacher Doppel-Puffer Mechanismus ..  515
  41. 10. IOUtils.i ......... Ein/Ausgabe-Utils ....................  559
  42. 11. MathTransUtils.i .. Utils für MathTrans.lib ..............  586
  43. 12. Parameters.i ...... Parameter ............................  609
  44. 13. PCQMemory.i ....... PCQ-Speicher .........................  635
  45. 14. Random.i .......... Zufallsgenerator .....................  656
  46. 15. RunProgram.i ...... externe Programme starten ............  690
  47. 16. SameName.i ........ Jokerzeichen .........................  764
  48. 17. StringLib.i ....... C-String-Funktionen ..................  813
  49. 17. TaskUtils.i ....... Task-Utils ........................... 1010
  50. 18. TimerUtils.i ...... Uhr-Utils ............................ 1030
  51.  
  52.  A. Register (Funktionen/Prozeduren-Übersicht) ............... 1063
  53.  B. Schlußwort des Übersetzers ............................... 1179
  54.  
  55.  
  56.  
  57. 1. Break.i
  58. ----------
  59.  
  60. Hier wird CheckBreak deklariert, eine Funktion, die Euch mitteilt, ob der
  61. Benutzer Ctrl-C gedrückt hat.
  62. Sourcecode: Runtime/Extras.
  63.  
  64. Function CheckBreak : Boolean;
  65.     External;
  66.  
  67. Gibt TRUE zurück, wenn der User Ctrl-C gedrückt hat.
  68.  
  69.  
  70.  
  71. 2. BuildMenu.i
  72. --------------
  73.  
  74. Diese Routinen bieten ein einfaches Interface zum Amiga-Menüsystem, ähnlich
  75. zu dem von AmigaBASIC. Das Ganze geht natürlich auf Kosten der Flexibilität,
  76. aber für viele Menüsysteme wird´s genügen.
  77.  
  78. Um diese Routinen zu benutzen, müßt Ihr erst ein Fenster öffnen. Danach muß
  79. InitializeMenu aufgerufen und Euer "valid Window-Pointer" übergeben werden.
  80. Beachtet, daß das Fenster dann schon offen sein muß!
  81. Danach ruft NewMenu("Menu Name") mit jedem beliebigen Namen auf, um Euer 1.
  82. Menü zu erstellen. Ruft dann NewItem("name", 'N') für jeden zu erzeugenden
  83. Menüpunkt auf. NewMenu muß vor NewItem aufgerufen werden. Wenn Ihr keine Ta-
  84. stenkombination für den Menüpunkt haben wollt, müßt Ihr '\0' (null) überge-
  85. ben.
  86. Wollt Ihr Untermenüpunkte für Eueren Menüpunkt, müßt Ihr NewSubItem mit den-
  87. selben Parametern wie NewItem aufrufen. Beachtet, daß NewItem zumindest ein-
  88. mal vor NewSubItem aufgerufen werden muß.
  89. Beachtet auch, daß die Reihenfolge wichtig ist. Wenn Ihr beispielsweise die
  90. Reihenfolge zweier Menüpunkte vertauscht wurde, erscheinen sie in umgekehr-
  91. ter Reihenfolge im Menü. Alle Menüpunkte erscheinen auch unter dem zuletzt
  92. definierten Menü. Beachtet außerdem, daß diese Routinen nur 1 Menüstreifen
  93. auf einmal definieren.
  94.  
  95. Habt Ihr all das gemacht, könnt Ihr AttachMenu aufrufen, um den Benutzer das
  96. Ansehen der Menüs und das Benutzen derer zu erlauben. Dann müßt Ihr aber den
  97. IDCMP-Port des Fenster (window^.UserPort) überwachen, um MENUPICK_f-Mittei-
  98. lungen zu erhalten, die Ihr mittes MenuNum() und ItemNum() entziffern könnt.
  99. Siehe auch das "Intuition Manual" (wer´s denn hat - Anm.d.Ü.).
  100. Wollt Ihr das Menü aus dem Fenster wieder entfernen, könnt Ihr DetachMenu
  101. aufrufen, aber solange Ihr den Speicher nicht wieder freigebt (siehe unten),
  102. könnt Ihr mittels AttachMenu wieder auf das Menü zugreifen. Ihr könnt auch
  103. verschiedene Teile des Menüs mittels OnMenu() und OffMenu() in Geister-
  104. schrift darstellen. Näheres befindet sich wieder im "Intuition Manual".
  105. Um den Speicher eines Menüpunkts wieder freizugeben, müßt Ihr dann
  106. DisposeMenu aufrufen. Habt Ihr das Menü nicht losgelöst (detached), gibt´s
  107. früher oder später einen Systemabsturz. Der Speicher muß nicht unbedingt
  108. freigegeben werden, da das am Programmende automatisch gemacht wird.
  109. Das Menü muß aber vor dem Schließen des Fensters losgelöst werden.
  110. Sourcecode: Runtime/Extras
  111.  
  112. {$I "Include:Intuition/Intuition.i" for WindowPtr }
  113.  
  114.  
  115. Procedure DisposeMenu;
  116.     External;
  117.  
  118. Gibt den Speicher des Menüpunkts wieder frei. Geht aber sicher, daß das Menü
  119. nicht gerade angezeigt wird !!!
  120.  
  121.  
  122. Procedure InitializeMenu(w : WindowPtr);
  123.     External;
  124.  
  125. Erzeugt das BuildMenu System (bringt einige nützliche Voreinstellungen).
  126. w muß dabei auf ein wahres, offenes Fenster zeigen.
  127.  
  128.  
  129. Procedure NewMenu(str : String);
  130.     External;
  131.  
  132. Fügt ein neues Menü an den Menüstreifen an. Zuvor muß InitializeMenu aufge-
  133. rufen werden. Dies muß zumindest einmal vor NewItem oder NewSub aufgerufen
  134. werden.
  135.  
  136.  
  137. Procedure NewItem(name : String; comm : Char);
  138.     External;
  139.  
  140. Fügt ein Item an das zuletzt definierte Menü an. Zuvor muß NewMenu aufgeru-
  141. fen werden. 'name' ist der Text, der in der Box geschrieben werden soll, und
  142. 'comm' die equivalente Tastenkombination. Für keine equivalente Tastenkombi-
  143. nation muß '\0' (NULL-Byte) verwendet werden.
  144.  
  145. Wenn Ihr alle Menüpunkte gleichlang macht (mittels Leerstellen am Ende), hat
  146. der Benutzer es nachher einfacher, das Menü zu benutzen.
  147.  
  148.  
  149. Procedure NewSubItem(name : String; comm : Char);
  150.     External;
  151.  
  152. Fügt ein Untermenü zum aktuellen Menüpunkt hinzu. Zuvor muß NewItem aufgeru-
  153. fen worden sein. Die Parameter usw. entsprechten denen von NewItem.
  154.  
  155.  
  156. Procedure AttachMenu;
  157.     External;
  158.  
  159. Fügt den erzeugten Menüstreifen an das im InitializeMenu-Aufruf angegebene
  160. Fenster an. Dieser Befehl gibt die Struktur an Intuition weiter, das dann
  161. die eigentliche Arbeit macht.
  162.  
  163.  
  164. Procedure DetachMenu;
  165.     External;
  166.  
  167. Entfernt das Menü vom Fenster, gibt den Speicher usw. nicht zurück. Ihr
  168. könnt das Menü später mittels AttachMenu wieder anfügen. Um den Benutzer da-
  169. von abzuhalten, ein best. Menü zu benutzen, ist es aber besser, OnMen() und
  170. OffMenu() zu verwenden, insbesondere, wenn nur ein paar Menüpunkte gesperrt
  171. werden sollen.
  172.  
  173. Diese Routine muß vor dem Schließen eines Fensters aufgerufen werden.
  174.  
  175.  
  176.  
  177. 3. ConsoleIO.i
  178. --------------
  179.  
  180. Hiermit wird das gesamte normale console.device Zeugs zum Arbeiten mit Fen-
  181. stern implementiert. Der erste Satz an Routinen ist das Standard-Amiga-Zeug,
  182. das im "ROM Kernel Manual" beschrieben ist. Ein Beispiel befindet sich unter
  183. "ConsoleTest.p" im Verzeichnis "Examples".
  184. Sourcecode: Runtime/Extras
  185.  
  186. {$I "Include:Exec/IO.i"}
  187. {$I "Include:Exec/Ports.i"}
  188.  
  189.  
  190. Procedure ConPutChar(Request : IOStdReqPtr; Character : Char);
  191.     External;
  192.  
  193.  
  194. Procedure ConWrite(Request : IOStdReqPtr; Str : String; length : Integer);
  195.     External;
  196.  
  197.  
  198. Procedure ConPutStr(Request : IOStdReqPtr; Str : String);
  199.     External;
  200.  
  201.  
  202. Procedure QueueRead(Request : IOStdReqPtr; Where : String);
  203.     External;
  204.  
  205.  
  206. Function ConGetChar(consolePort : MsgPortPtr; Request : IOStdReqPtr;
  207.                         WhereTo : String) : Char;
  208.     External;
  209.  
  210.  
  211.  
  212. 4. ConsoleUtils.i
  213. -----------------
  214.  
  215. Hier werden 2 Funktionen definiert, die einfach das console.device initiali-
  216. sieren und schließen. Das wird mittels OpenDevice gemacht, wobei anschlies-
  217. send ConsoleBase (definiert in Devices/Console.i) auf io_Device gesetzt
  218. wird.
  219.  
  220. Siehe auch Utilis/ConsoleIO.i, Utils/CRT.i und - natürlich - Devices/Con-
  221. sole.i.
  222.  
  223. Sourcecode: RunTime/Extras.
  224.  
  225. {$I "Include:Exec/IO.i"}
  226. {$I "Include:Devices/Console.i"}
  227.  
  228. var
  229.     ConsoleRequest : IOStdReq;
  230.  
  231.  
  232. Procedure OpenConsoleDevice;
  233.     External;
  234.  
  235. Hiermit wird ein gültiger Zeiger oder Nil auf ConsoleBase assignt. Alles was
  236. eigentlich gemacht wird, ist das Aufrufen von OpenDevice und das io_Device
  237. Feld auszulesen. Auf jeden Fall müßt Ihr einen gültigen Zeiger auf Console-
  238. Base zeigen lassen bevor Ihr RawKeyKonvert oder CDInputHandler aufruft.
  239.  
  240.  
  241. Procedure CloseConsoleDevice;
  242.     External;
  243.  
  244. Schließt das console.device.
  245.  
  246.  
  247.  
  248. 5. CRT.i
  249. --------
  250.  
  251. Diese Routinen sind ein einfacher Versuch einige der CRT-Routinen von Turbo
  252. Pascal zu imitieren. Siehe auch "ConsoleTest.p" für ein Beispiel zur Benut-
  253. zung.
  254. Beachtet, daß ConsoleSetPtr, der eigentliche Typ, der von AttachConsole zu-
  255. rückgegeben wird, hier nicht definiert ist.
  256. Sourcecode: Runtime/Extras (unter CRT.p und CRT2.p).
  257.  
  258. {$I "Include:Intuition/Intuition.i"}
  259.  
  260.  
  261. Function AttachConsole(w : WindowPtr) : Address;
  262.     External;
  263.  
  264. Diese Funktion initialisiert die CRT-Routinen für ein bestimmtes Fenster.
  265. Diese Routine gibt Nil zurück, wenn es ein Problem gegeben hat, oder den
  266. Zeiger auf einen Record, der die wichtigen Informationen enthält, die der
  267. Rest der Routinen benötigt.
  268. AttachConsole muß vor allen anderen CRT-Routinen aufgerufen werden muß.
  269.  
  270.  
  271. Procedure ClrEOL(CRT : Address);
  272.     External;
  273.  
  274. Löscht von der Cursorposition bis zum Zeilenende.
  275.  
  276.  
  277. Procedure ClrScr(CRT : Address);
  278.     External;
  279.  
  280. Löscht den Textbereich des Fensters und bewegt den Cursor zu 1,1.
  281.  
  282.  
  283. Procedure CursOff(CRT : Address);
  284.     External;
  285.  
  286. Schaltet den Textcursor des console.device ab. Beachtet, daß dieser nicht
  287. derselbe wie der Mauszeiger ist!
  288.  
  289.  
  290. Procedure CursOn(CRT : Address);
  291.     External;
  292.  
  293. Schaltet den Textcursor wieder ein.
  294.  
  295.  
  296. Procedure DetachConsole(CRT : Address);
  297.     External;
  298.  
  299. Schließt das console.device wieder und gibt den gesamten Speicher wieder
  300. frei, der durch den AttachConsole Aufruf reserviert wurde.
  301. Diese Routine muß aufgerufen werden, bevor das Programm abbricht und bevor
  302. das Fenster geschlossen wird.
  303.  
  304.  
  305. Procedure GotoXY(CRT : Address; x,y : Short);
  306.     External;
  307.  
  308. Bewegt den Textcursor auf die angegebene Spalte und Zeile X,Y.
  309.  
  310.  
  311. Procedure InsLine(CRT : Address);
  312.     External;
  313.  
  314. Fügt eine Zeile an der aktuellen Cursorposition ein. Die aktuelle Zeile und
  315. alle Zeilen darunter werden um eine nach unten verschoben.
  316.  
  317.  
  318. Function KeyPressed(CRT : Address) : Boolean;
  319.     External;
  320.  
  321. Gibt TRUE zurück, wenn eine Taste in der console wartet.
  322.  
  323.  
  324. Function MaxX(CRT : Address) : Short;
  325.     External;
  326.  
  327. Gibt die Spalte des Fensters an, in der das letzte Zeichen ausgegeben werden
  328. kann.
  329.  
  330.  
  331. Function MaxY(CRT : Address) : Short;
  332.     External;
  333.  
  334. Gibt die letzte Zeile des Fensters zur Zeichenausgabe an.
  335.  
  336.  
  337. Function ReadKey(CRT : Address) : Char;
  338.     External;
  339.  
  340. Wartet auf den Druck einer Taste und gibt diese zurück. CRT ist ein Zeiger
  341. auf den CRT-Record, zurückgegeben von AttachConsole. Beachtet, daß die Taste
  342. nicht automatisch angezeigt wird - Ihr müßt dafür WriteString oder so aufru-
  343. fen.
  344.  
  345.  
  346. Procedure TextColor(CRT : Address; t : Byte);
  347.     External;
  348.  
  349. Setzt die Vordergrund-Stiftnummer (Textfarbe). Die tatsächlich angezeigte
  350. Farbe hängt von der aktuellen Farbpalette des Screens ab, wodurch Ihr
  351. SetRGB4 (oder equivalentes) aufrufen müßt, um spezielle Werte zu bekommen.
  352.  
  353.  
  354. Procedure TextBackground(CRT : Address; t : Byte);
  355.     External;
  356.  
  357. Setzt die Hintergrundfarbe für den Text.
  358.  
  359.  
  360. Function WhereX(CRT : Address) : Short;
  361.     External;
  362.  
  363. Gibt die aktuelle Textcursor-Spalte an.
  364.  
  365.  
  366. Function WhereY(CRT : Address) : Short;
  367.     External;
  368.  
  369. Gibt die aktuelle Textcursor-Zeile an.
  370.  
  371.  
  372. Procedure WriteString(CRT : Address; Str : String);
  373.     External;
  374.  
  375. Schreibt einen String ins Fenster mittels des console.device. Der String
  376. kann ANSI-Codes enthalten, um die Schiftfarben zu ändern, den Cursor zu be-
  377. wegen, und vieles mehr!
  378.  
  379.  
  380.  
  381. 6. DateTools.i
  382. --------------
  383.  
  384. Diese Routinen helfen, die DateStamps von AmigaDOS und CurrentTime() von In-
  385. tuizion zu benutzen, die, um Speicher zu sparen, relativ umständlich forma-
  386. tiert sind. Diese Routinen benutzen DateDescription Records, die das Jahr,
  387. den Monat und die Tagesnamen in einer menschlichen Form enthalten. Dieses
  388. Module exportiert auch einige Typenkonstanten, die den Monat und die Tages-
  389. namen richtig schreiben.
  390.  
  391. Die Monatsnamen- und Tagesnamen-Arrays können wenn nötig verändert oder ent-
  392. fernt werden. Wenn Ihr z.B. nicht Englisch benutzt, könnt Ihr sie in diesem
  393. File verändern und müßt Euch sonst nirgends darum kümmern. Wollt Ihr Spei-
  394. cher sparen, könnt Ihr sie auch vollständig entfernen. Ihr könnt aber nicht
  395. das DaysInMonth-Array loswerden, da das in den DateTools-Routinen verwendet
  396. wird.
  397.  
  398. (das Verändern der Namen natürlich im Include-File vornehmen, nicht in die-
  399.  sem Doc-File! - Anm.d.Ü.)
  400.  
  401. {$I "Include:Libraries/DOS.i"}
  402.  
  403. Type
  404.     DaysOfTheWeek = (Sunday, Monday, Tuesday, Wednesday,
  405.                         Thursday, Friday, Saturday);
  406.  
  407.     DateDescription = record
  408.         Day     : Byte;                 { Day of month, 1..31 }
  409.         Month   : Byte;                 { Month, 1..12 }
  410.         Year    : Short;                { Year, 1978... }
  411.         DOW     : DaysOfTheWeek;        { Sunday .. Saturday }
  412.         Hour    : Byte;                 { 0..23.  0 = 12 AM, 12 = Noon }
  413.         Minute  : Byte;                 { 0..59 }
  414.         Second  : Byte;                 { 0..59 }
  415.     end;
  416.  
  417. Const
  418.     MonthNames : Array [1..12] of String =
  419.                        ("January",
  420.                         "February",
  421.                         "March",
  422.                         "April",
  423.                         "May",
  424.                         "June",
  425.                         "July",
  426.                         "August",
  427.                         "September",
  428.                         "October",
  429.                         "November",
  430.                         "December");
  431.  
  432.     DayNames : Array [Sunday..Saturday] of String =
  433.                        ("Sunday",
  434.                         "Monday",
  435.                         "Tuesday",
  436.                         "Wednesday",
  437.                         "Thursday",
  438.                         "Friday",
  439.                         "Saturday");
  440.  
  441. Das folgende Feld verändert sich, wenn Ihr eine Datumbeschreibung für ein
  442. Schaltjahrdatum haben wollt. Wollt Ihr also diese Werte verwenden, müßt Ihr
  443. sichergehen, daß DaysInMonth[1] auf den benötigten Wert gesetzt wird. Beach-
  444. tet auch, daß dieses Feld im Gegensatz zu den oben beschriebenen Monatsnamen
  445. zero-based (d.h. mit 0 als Basis) ist.
  446.  
  447.     DaysInMonth : Array [0..11] of Byte = (31,28,31,30,31,30,
  448.                                            31,31,30,31,30,31);
  449.  
  450.  
  451. Procedure GetDescription(Total : Integer; var DD : DateDescription);
  452.     External;
  453.  
  454. Diese Prozedur berechnet bei gegebenen Gesamtsekunden den Tag, Monat, Jahr,
  455. Tageszeit usw.
  456.  
  457.  
  458. Procedure TimeDesc(var DD : DateDescription);
  459.     External;
  460.  
  461. Ermittelt eine Beschreibung der aktuellen Zeit.
  462.  
  463.  
  464. Procedure StampDesc(DS : DateStampRec; var DD : DateDescription);
  465.     External;
  466.  
  467. Ermittelt eine Beschreibung basierend auf einen DateStampRec.
  468.  
  469.  
  470.  
  471. 7. DeadKeyConvert.i
  472. -------------------
  473.  
  474. Hiermit wird lediglich die DeadKeyConvert-Funktion deklariert, um rohe Ta-
  475. stendrücke zu "kochen" (vom Intuition). Mehr Infos darüber gibt´s im ROM
  476. Kernal Manual und im Enhancer Manual.
  477. Objektcode: in PCQ.lib
  478. Sourcecode: Runtime/Extras
  479. Ihr müßt vor der Benutzung dieser Funktion OpenConsoleDevice (definiert in
  480. ConsoleUtils.i) aufrufen, da DeadKeyConvert RawKeyConvert aufruft.
  481.  
  482. {$I "Include:Intuition/Intuition.i"}
  483.  
  484. Benutzt Ihr diese Funktion ohne Intuition.i, was wohl recht selten sein
  485. dürfte, solltet Ihr den Typ von "msg" in Address oder MassagePtr oder so
  486. verändern. Somit müßt Ihr Intuition.i nicht includen, wenn Ihr nicht wollt.
  487.  
  488.  
  489. Function DeadKeyConvert(msg : IntuiMessagePtr; Buffer : String;
  490.                         BufSize : Integer; KeyMap : Address) : Integer;
  491.     External;
  492.  
  493.  
  494.  
  495. 8. DOSUtils.i
  496. -------------
  497.  
  498. Ein paar Routinen, die die Benutzung von DOS etwas einfacher machen.
  499. Sourcecode: Runtime/Extras
  500.  
  501. {$I "Include:Libraries/DOS.i"}
  502.  
  503.  
  504. Function APTRtoBPTR(a : Address) : BPTR;
  505.     External;
  506.  
  507.  
  508. Function BPTRtoAPTR(b : BPTR) : Address;
  509.     External;
  510.  
  511.  
  512. Function GetFileHandle(var f : Text) : FileHandle;
  513.     External;
  514.  
  515.  
  516.  
  517. 9. DoubleBuffer.i
  518. -----------------
  519.  
  520. Diese Routinen bieten einen sehr einfachen Doppelpuffer-Mechanismus, haupt-
  521. sächlich dadurch, indem er ein bißchen inflexibel mit der Wahl von Screens
  522. und Fenstern ist.
  523.  
  524. Das erste, was gemacht werden muß, ist eine NewScreen-Struktur zu erzeugen,
  525. genau, wie Ihr das für OpenScreen machen würdet. Das kann jede Screen-Art
  526. sein. Danach müßt Ihr OpenDoubleBuffer aufrufen, der einen Zeiger auf ein
  527. Full-Screen-rahmenloses Backdrop-Fenster zurückgibt, oder Nil, falls irgend-
  528. was schiefgelaufen ist.
  529.  
  530. Schreibt Ihr in den RastPort des Fensters, ist es unsichtbar, bis Ihr Swap-
  531. Buffers aufruft. Übrigens könnt Ihr immer in denselben RastPort schreiben -
  532. Ihr müßt nach SwapBuffers nicht reinitialisieren. Alles Puffer-Tauschen
  533. läuft auf BitMap-Ebene ab, wodurch es transparent zu den RastPorts ist.
  534.  
  535. Seid Ihr fertig, müßt Ihr CloseDubbleBuffer aufrufen. Schließt Ihr das Fen-
  536. ster und den Screen getrennt, könnte es zum Absturz kommen, zumindest aber
  537. zum Speicherverlust.
  538.  
  539. Sourcecode: Runtime/Extras
  540. Objektcode: PCQ.lib
  541.  
  542. Ein letzter Punkt: GfxBase muß offen sein, bevor Ihr OpenDoubleBuffer auf-
  543.                    ruft. Wäre es nicht offen, wozu dann Doppelpuffer?
  544.  
  545. {$I "Include:Intuition/Intuition.i"}
  546.  
  547.  
  548. Function OpenDoubleBuffer(ns : NewScreenPtr) : WindowPtr;
  549.     External;
  550.  
  551.  
  552. Procedure SwapBuffers(w : WindowPtr);
  553.     External;
  554.  
  555.  
  556. Procedure CloseDoubleBuffer(w : WindowPtr);
  557.     External;
  558.  
  559.  
  560.  
  561. 10. IOUtils.i
  562. -------------
  563.  
  564. Dieses File enthält NewList, CreatePort, DeletePort, CreateStdIO und Delete-
  565. StdIO. Beachtet dabei, daß diese Funktionen NICHT die Speicherroutinen von
  566. PCQ benutzen. Schlägt das löschen davon fehl, ist der Speicher verloren.
  567. Objektcode: PCQ.lib
  568. Sourcecode: Runtime/Extras
  569.  
  570. {$I "Include:Exec/Ports.i"}
  571. {$I "Include:Exec/IO.i"}
  572.  
  573.  
  574. Function CreatePort(Name : String; pri : Integer) : MsgPortPtr;
  575.     External;
  576.  
  577. Procedure DeletePort(port : MsgPortPtr);
  578.     External;
  579.  
  580. Function CreateStdIO(ioReplyPort : MsgPortPtr) : IOStdReqPtr;
  581.     External;
  582.  
  583. Procedure DeleteStdIO(Request : IOStdReqPtr);
  584.     External;
  585.  
  586.  
  587.  
  588. 11. MathTransUtils.i
  589. --------------------
  590.  
  591. Ein paar Routinen, die die Benutzung der mathtrans.libarary etwas einfacher
  592. machen. OpenMathTrans versucht die Library zu öffnen und gibt TRUE zurück,
  593. wenn nichts schiefgelaufen ist. CloseMathTrans macht dasselbe wie Close-
  594. Library(...), aber FlushMathTrans schließt die Library UND entfernt sie aus
  595. dem Speicher, wenn niemand sie sonst derzeit benutzt.
  596.  
  597.  
  598. Function OpenMathTrans : Boolean;
  599.     External;
  600.  
  601.  
  602. Procedure CloseMathTrans;
  603.     External;
  604.  
  605.  
  606. Procedure FlushMathTrans;
  607.     External;
  608.  
  609.  
  610.  
  611. 12. Parameters.i
  612. ----------------
  613.  
  614. Dies ist das Zeug, das zur Arbeit mit Kommandozeilen nötig ist, incl. der
  615. Workbench-Mitteilung.
  616.  
  617. {$I "Include:Exec/Ports.i"}
  618. {$I "Include:Workbench/Startup.i"}
  619.  
  620.  
  621. Function GetStartupMsg : WBStartupPtr;
  622.     external;
  623.  
  624. Gibt den Workbench-Mitteilungs-Zeiger (WB-MessagePtr) zurück.
  625.  
  626.  
  627. Procedure GetParam(n : Short; S : String);
  628.     external;
  629.  
  630. Kopiert den abgefragten Parameter in den String S. S muß natürlich bereits
  631. reserviert worden sein. Beachtet, daß die Parameter von der Kommandozeile
  632. oder der Workbench-Mitteilung sein können. S ist ein String der Länge 0 (in
  633. anderen Worten S^ = Chr(0)), wenn der Parameter nicht existiert.
  634.  
  635.  
  636.  
  637. 13. PCQMemory.i
  638. ---------------
  639.  
  640. Diese Routinen reservieren sogenannten PCQ-Speicher und geben ihn wieder
  641. frei. Sie sind enthalten, um kompatibler mit TurboPascal zu sein, und in
  642. zukünftigen Versionen von PCQ werden sie Standardprozeduren sein.
  643.  
  644.  
  645. Procedure GetMem(var p : Address; Size : Integer);
  646.     External;
  647.  
  648. Reserviert Systemspeicher und übergibt das Ergebnis in p.
  649.  
  650.  
  651. Procedure FreePCQMem(var p : Address; Size : Integer);
  652.     External;
  653.  
  654. Gibt Speicher frei, der mit GetMem reserviert wurde.
  655.  
  656.  
  657.  
  658. 14. Random.p
  659. ------------
  660.  
  661. Hier ist ein sehr langer zyklischer Zufallszahlengenerator, der durch die
  662. Verbindung dreier unabhängiger Generatoren erzeugt wurde. Die Technik wurde
  663. in der Ausgabe 3/87 des Byte-Magazins.
  664. Sourcecode: Runtime/Extras.
  665.  
  666.  
  667. Function RealRandom : Real;
  668.     External;
  669.  
  670. Gibt einen Real-Wert zwischen 0 und 1 zurück.
  671.  
  672.  
  673. Function RangeRandom(MaxValue : Integer) : Integer;
  674.     External;
  675.  
  676. Gibt einen Integer-Wert zwischen 0 und MaxValue (inclusive) zurück.
  677.  
  678.  
  679. Procedure UseSeed(seed : Integer);
  680.     External;
  681.  
  682. Setzt die Grundlagen abhängig vom übergebenen Wert.
  683.  
  684.  
  685. Procedure SelfSeed;
  686.     External;
  687.  
  688. Setzt die Grundlagen abhängig von der Systemuhr.
  689.  
  690.  
  691.  
  692. 15. RunProgram.i
  693. ----------------
  694.  
  695. Diese Routinen erlauben das Starten von Diskfiles oder von Segmenten, die
  696. Ihr als separate Prozesse geladen habt, d.h., daß sie AmigaDOS genau wie Ih-
  697. re Ursache benutzen können. Tasks, die Ihr wieder aufruft, sind viel einfa-
  698. cher, können aber keine DOS IO-Routinen (Ein/Ausgabe) benutzen, wobei auch
  699. Write() und Read() enthalten sind.
  700.  
  701. Programme, die mit diesen Routinen gestartet wurden, denken, daß sie von der
  702. Workbench gestartet worden sind, somit müssen sie dies behandeln können. Die
  703. typischen CLI-Befehle wie "dir" und "copy" laufen NICHT mit diesen Routinen.
  704. Die meisten PCQ-Pascal-Programme dürften aber damit keine Probleme haben.
  705.  
  706. Da diese Programme wie Workbenchprogramme gestartet werden, könnt Ihr auch
  707. nicht einfach eine Kommandozeile übergeben. Das läßt beispielsweise das Lau-
  708. fenlassen des Pascal-Compilers aus...solange Ihr mit der Workbench-Startup-
  709. Mitteilung rumspielt, was für den Compiler klar ist. Das mag mit manchen
  710. PCQ-Pascal-Programmen laufen, mit manchen aber auch nicht.
  711.  
  712. Da diese Routinen die normalen PCQ-Speicherreservierungsschemen benutzen,
  713. kann das aufrufende Programm nicht beendet werden, bevor alle daraus aufge-
  714. rufenen Programme fertig sind.
  715.  
  716. Der einfachste Weg, um diese Routinen zu benutzen, ist das Aufrufen von Run-
  717. Program. Der Aufruf sieht so aus wie:
  718.  
  719.         if RunProgram("path/filename", 4000) then
  720.             writeln('program ran OK')
  721.         else
  722.             writeln('problem running program');
  723.  
  724. Denkt daran, daß nicht alle Programm mittels dieser Routinen gestartet wer-
  725. den können. PCQ-Programme können es wahrscheinlich, es wäre aber nicht ver-
  726. wunderlich, wenn es in manchen Fällen Probleme gäbe.
  727.  
  728. Sourcecode: Runtime/Extras
  729.  
  730. type
  731.     RunProgPtr = Address;
  732.  
  733. Diese Adresse wird von den "No Wait" Funktionen zurückgegeben. Sie zeigt auf
  734. einen Record, der alle Speicher- und sonstigen vom Programm reservierte Rou-
  735. tinen im Auge behält. Dieser Record ist der Schlüssel zu diesen Routinen.
  736.  
  737.  
  738. Function RunSegmentNW(ProcName : String;
  739.                       Segment : Address;
  740.                       StackSize : Integer) : RunProgPtr;
  741.     External;
  742.  
  743. Wenn Ihr bereits ein Segment geladen habt, wird das Segment als ein Prozeß
  744. gestartet und sofort zurückgekehrt. Ist irgendwas schiefgelaufen, gibt diese
  745. Routine Nil zurück. Ansonsten läuft der neue Prozeß schon, wenn diese Routi-
  746. ne zurückkehrt.
  747.  
  748.  
  749. Function RunProgramNW(FileName : String; StackSize : Integer) : RunProgPtr;
  750.     External;
  751.  
  752. Läd ein File und startet es als Prozeß. Kehrt zurück, ohne darauf zu warten,
  753. bis dieses neue Programm fertig ist. Ist irgendwas schiefgelaufen, gibt die-
  754. se Routine Nil zurück. Ansonsten läuft das Programm schon.
  755.  
  756.  
  757. Procedure FinishProgram(RP : RunProgPtr);
  758.     External;
  759.  
  760. Wartet auf die Beendigung des Prozesses und gibt dann alles durch die Run-
  761. Routinen reservierte wieder frei. Wenn Ihr das Programm mit RunSegmentNW ge-
  762. startet habt (z.B. wenn Ihr schon ein Programm geladen hattet), wird diese
  763. Routine Euer Segment nicht UnLoadSeg´en. D.h. diese Routine gibt alles durch
  764. die Run-Routinen reservierte wieder frei, aber sonst nichts.
  765.  
  766.  
  767. Function RunProgram(FileName : String; StackSize : Integer) : Boolean;
  768.     External;
  769.  
  770. Startet das genannte Programm als ein Prozeß und wartet bis dieser neue Pro-
  771. zeß fertig ist, bevor er zurückkehrt. Lief der Prozeß OK, gibt diese Routine
  772. TRUE zurück, ansonsten FALSE.
  773.  
  774.  
  775. Function RunSegment(ProcName    : String;
  776.                     Segment     : Address;
  777.                     StackSize   : Integer) : Boolean;
  778.     External;
  779.  
  780. Habt Ihr - warum auch immer - bereits ein Segment geladen, könnt Ihr diese
  781. Routine aufrufen, um dieses Segment als Prozeß laufen zu lassen und dann vor
  782. dem Zurückkehren auf die Beendigung dieses Prozesses zu warten. Ist irgend-
  783. was schiefgelaufen, gibt diese Routine FALSE zurück, ansonsten TRUE.
  784.  
  785.  
  786. Function ProgramFinished(RP : RunProgPtr) : Boolean;
  787.     External;
  788.  
  789. Ist der Prozeß, auf den RP zeigt, fertig, wird der gesamte Speicher freige-
  790. geben, den diese Routinen reserviert haben und TRUE zurückgegeben. Wenn
  791. nicht, wird FALSE zurückgegeben. Wie FinishProgram gibt diese Routine auch
  792. nur Systemresourcen frei, die von RunSomething-Routinen reserviert wurden.
  793.  
  794.  
  795.  
  796. 16. SameName.i
  797. --------------
  798.  
  799. Dieses Include-File beinhaltet nur eine Funktion: SameName.
  800.  
  801. Diese Routine implementiert die einfachsten Teile der AmigaDOS-Mustererken-
  802. nung (Jokerzeichen). Derzeit sind das nur die # und ? Operatoren zuzüglich
  803. dem einfachen Anführungszeigen ', der vor # und ? bedeutet, daß diese als
  804. normales Zeichen interpretiert werden sollen. Mehr dazu im AmigaDOS-Hand-
  805. buch.
  806. Sourcecode: Runtime/Extras
  807. Objektcode: PCQ.lib
  808.  
  809.  
  810. Function SameName(Mask, Target : String) : Boolean;
  811.     External;
  812.  
  813.  
  814.  
  815. 17. StringLib.i
  816. ---------------
  817.  
  818. Hier sind ein paar der gewöhnlichen C-String-Funktionen:
  819.  
  820.  
  821. Function isupper(c : Char) : Boolean;
  822.     External;
  823.  
  824. Gibt TRUE zurück, wenn das Zeichen in A..Z ist.
  825.  
  826.  
  827. Function islower(c : Char) : Boolean;
  828.     external;
  829.  
  830. Gibt TRUE zurück, wenn das Zeichen in a..z ist.
  831.  
  832.  
  833. Function isalpha(c : Char) : Boolean;
  834.     external;
  835.  
  836. Gibt TRUE zurück, wenn das Zeichen in A..Z oder a..z ist.
  837.  
  838.  
  839. Function isdigit(c : Char) : Boolean;
  840.     external;
  841.  
  842. Gibt TRUE zurück, wenn das Zeichen in 0..9 ist.
  843.  
  844.  
  845. Function isalnum(c : Char) : Boolean;
  846.     external;
  847.  
  848. Gibt TRUE zurück, wenn ifalpha oder isdigit wahr ist.
  849.  
  850.  
  851. Function isspace(c : Char) : Boolean;
  852.     external;
  853.  
  854. Gibt TRUE zurück, wenn das Zeichen eine "weiße Leerstelle ist", wie z.B.
  855. Leerzeichen (Space), Formfeed, Linefeed, Carriage Return, Tabulatoren, usw.
  856.  
  857.  
  858. Function toupper(c : Char) : Char;
  859.     external;
  860.  
  861. Ist das Zeichen in a..z, gibt diese Funktion den zugehörigen Großbuchstaben
  862. aus. Ansonsten gibt sie c zurück.
  863.  
  864.  
  865. Function tolower(c : Char) : Char;
  866.     external;
  867.  
  868. Ist c in A..Z, gibt diese Funktion den zugehörigen Kleinbuchstaben aus.
  869. Ansonsten gibt sie c zurück.
  870.  
  871.  
  872. Function streq(s1, s2 : String) : Boolean;
  873.     external;
  874.  
  875. Gibt TRUE zurück, wenn s1 und s2 identisch sind.
  876.  
  877.  
  878. Function strneq(s1, s2 : String; n : Short) : Boolean;
  879.     external;
  880.  
  881. Gibt TRUE zurück, wenn die ersten n Zeichen von s1 und s2 identisch sind.
  882.  
  883.  
  884. Function strieq(s1, s2 : String) : Boolean;
  885.     external;
  886.  
  887. Entspricht streq(), ist aber Case Insensitive (achtet nicht auf Groß/Klein-
  888. schreibung).
  889.  
  890.  
  891. Function strnieq(s1, s2 : String; n : Short) : Boolean;
  892.     external;
  893.  
  894. Entspricht strneq(), ist aber Case Insensitive.
  895.  
  896.  
  897. Function strcmp(s1, s2 : String) : Integer;
  898.     external;
  899.  
  900. Gibt einen Integer-Wert < 0 zurück, wenn s1 < s2, 0 wenn sie gleich sind und
  901. > 0 wenn s1 > s2. Beachtet, daß die zurückgegebenen Werte in 1.0 immer -1, 0
  902. und 1 waren, was seit Version 1.1 nicht mehr der Fall ist.
  903.  
  904.  
  905. Function stricmp(s1, s2 : String) : Integer;
  906.     external;
  907.  
  908. Entspricht strcmp, ist aber Case Insensitive.
  909.  
  910.  
  911. Function strncmp(s1, s2 : String; n : Short) : Integer;
  912.     external;
  913.  
  914. Entspricht strcmp(), beachtet aber nur die ersten n Zeichen.
  915.  
  916.  
  917. Function strnicmp(s1, s2 : String; n : Short) : Integer;
  918.     external;
  919.  
  920. Entspricht strncmp, ist aber Case Insensitive.
  921.  
  922.  
  923. Function strlen(s : String) : Integer;
  924.     external;
  925.  
  926. Giubt die Zeichenanzahl im String an. Beachtet, daß Ihr strlen(s) + 1 Bytes
  927. benötigt, um den String zu halten, da die abschließende Null nicht in der
  928. Länge berücksichtigt wird.
  929.  
  930.  
  931. Procedure strcpy(s1, s2 : String);
  932.     external;
  933.  
  934. Kopiert s2 nach s1 und hängt dabei eine beendende Null an. Dies ist dasselbe
  935. wie C, aber anders als in V1.0.
  936.  
  937.  
  938. Procedure strncpy(s1, s2 : String; n : Short);
  939.     external;
  940.  
  941. Kopiert s2 nach s1, mit einem Maximum von n Zeichen. Hängt eine Null am Ende
  942. an.
  943.  
  944.  
  945. Procedure strcat(s1, s2 : String);
  946.     external;
  947.  
  948. Hängt s2 ans Ende von s1 an.
  949.  
  950.  
  951. Procedure strncat(s1, s2 : String; n : Short);
  952.     external;
  953.  
  954. Hängt höchstens n Zeichen von s2 an s1 an.
  955.  
  956.  
  957. Function strdup(s : String) : String;
  958.     External;
  959.  
  960. Erzeugt eine Kopie des Strings "s" und gibt einen Zeiger zurück.
  961.  
  962.  
  963. Function strpos(s1 : String; c : Char) : Integer;
  964.     external;
  965.  
  966. Gibt die Position (beginnend mit 0) der ersten (am weitesten links auftre-
  967. tenden) Stelle von c in s1 zurück. Ist kein c enthalten, gibt es -1 zurück.
  968.  
  969.  
  970. Function strrpos(s1 : String; c : Char) : Integer;
  971.     external;
  972.  
  973. Gibt den Integer-Wert der am weitesten rechts stehenden Position von c in s1
  974. zurück. Ist c nicht in s1, wird -1 zurückgegeben.
  975.  
  976.  
  977. Function Hash(s : String) : Short;
  978.     external;
  979.  
  980. Gibt den Hash-Wert von s zurück, berechnet die die AmigaDOS-Hash-Funktion.
  981. Ihr müßt diesen Wert (mittels AND und MOD) auf die Größe, die Ihr braucht,
  982. zurückschneiden.
  983.  
  984.  
  985. Function IntToStr(s : String; i : Integer) : Integer;
  986.     External;
  987.  
  988. Konvertiert i in seine Zeichenrepräsentation in s. Ist i kleiner als 0, be-
  989. ginnt der String mit einem Minus-Zeichen. Es gibt keine Extra-Leerstellen
  990. vor oder nach der Zahl. IntToStr gibt die Länge des erzeugten Strings zu-
  991. rück, die zwischen 1 und 11 ist.
  992.  
  993.  
  994. Function AllocString(l : Integer) : String;
  995.     external;
  996.  
  997. Reserviert l Bytes und gibt einen Zeiger auf den reservierten Speicher zu-
  998. rück. Dieser Speicher wird durch die New()-Funktion reserviert, wodurch er
  999. am Programmende ans System zurückgegeben wird. Beachtet, daß der korrekte
  1000. Speicherbedarf strlen(s) + 1 ist.
  1001.  
  1002.  
  1003. Procedure FreeString(s : String);
  1004.     external;
  1005.  
  1006. Gibt den Speicher, der von AllocString reserviert wurde, ans System zurück.
  1007. Da der Amiga ein Multitasking-Computer ist, solltet Ihr den Speicher, den
  1008. Ihr nicht benötigt, immer ans System zurückgeben.
  1009.  
  1010.  
  1011.  
  1012. 18. TaskUtils.i
  1013. ---------------
  1014.  
  1015. Hier werden die Task-Unterstützungs-Routinen CreateTask und DeleteTask de-
  1016. klariert.
  1017. Sourcecode: Runtime/Extras.
  1018.  
  1019. {$I "Include:Exec/Tasks.i"}
  1020.  
  1021.  
  1022. Function CreateTask(name : String; pri : Byte;
  1023.                         initPC : Address; stackSize : Integer) : TaskPtr;
  1024.     External;
  1025.  
  1026.  
  1027. Procedure DeleteTask(tc : TaskPtr);
  1028.     External;
  1029.  
  1030.  
  1031.  
  1032. 19. TimerUtils.i
  1033. ----------------
  1034.  
  1035. Hier werden CreateTimer, WaitTimer und DeleteTimer deklariert. Sie erlauben
  1036. die Benutzung des timer.device mit relativ wenig Overhead. Beachtet aber,
  1037. daß im Gegensatz zu den Beispielen im ROM Kernel Manual diese Routinen das
  1038. VBlank-Unit verwenden. Dadurch benötigen sie viel weniger Overhead; Ihr
  1039. solltet diese Routinen aber nicht für Zeiten kürzer als eine halbe Sekunde
  1040. benutzen.
  1041. Sourcecode: Runtime/Extras
  1042.  
  1043. {$I "Include:Exec/Ports.i"}
  1044. {$I "Include:Devices/Timer.i"}
  1045.  
  1046. Function CreateTimer : TimeRequestPtr;
  1047.     External;
  1048.  
  1049. Function SetTimer(WhichTimer : TimeRequestPtr;
  1050.                         Seconds, Microseconds : Integer) : MsgPortPtr;
  1051.     External;
  1052.  
  1053. Procedure WaitTimer(WhichTimer : TimeRequestPtr;
  1054.                         Seconds, Microseconds : Integer);
  1055.     External;
  1056.  
  1057. Procedure GetSysTime(WhichTimer : TimeRequestPtr; VAR TV : TimeVal);
  1058.     External;
  1059.  
  1060. Procedure DeleteTimer(WhichTimer : TimeRequestPtr);
  1061.     External;
  1062.  
  1063.  
  1064.  
  1065. Anhang A: Register
  1066. ------------------
  1067.  
  1068. Funktion/Prozedur  Typ Kap Zeile
  1069.  
  1070. AllocString() ..... F  16   988
  1071. APTRtoBPTR() ...... F   8   502
  1072. AttachConsole() ... F   5   259
  1073. AttachMenu ........ P   2   154
  1074. BPTRtoAPTR() ...... F   8   506
  1075. CheckBreak ........ F   1    62
  1076. CloseConsoleDevice. P   4   239
  1077. CloseDubbleBuffer() P   9   554
  1078. CloseMathTrans .... P  11   600
  1079. ClrEOL() .......... P   5   269
  1080. ClrScr() .......... P   5   275
  1081. ConGetChar() ...... F   3   204
  1082. ConPutChar() ...... P   3   188
  1083. ConPutStr() ....... P   3   196
  1084. ConsoleRequest .... V   4   227
  1085. ConWrite() ........ P   3   192
  1086. CreatePort() ...... F  10   572
  1087. CreateStdIO() ..... F  10   578
  1088. CreateTask() ...... F  17  1016
  1089. CreateTimer() ..... F  18  1040
  1090. CursOff() ......... P   5   281
  1091. CursOn() .......... P   5   288
  1092. DateDescription ... T   6   405
  1093. DayNames .......... C   6   430
  1094. DaysInMonth ....... C   6   445
  1095. DaysOfTheWeek ..... T   6   402
  1096. DeadKeyConvert() .. F   7   487
  1097. DeletePort() ...... P  10   575
  1098. DeleteStdIO() ..... P  10   581
  1099. DeleteTask() ...... P  17  1021
  1100. DeleteTimer() ..... P  18  1054
  1101. DetachConsole() ... P   5   294
  1102. DetachMenu ........ P   2   162
  1103. DisposeMenu ....... P   2   113
  1104. FinishProgram() ... P  15   755
  1105. FlushMathTrans .... P  11   604
  1106. FreePCQMem() ...... P  13   649
  1107. FreeString() ...... P  16   997
  1108. GetDesription() ... P   6   449
  1109. GetFileHandle() ... F   8   510
  1110. GetMem() .......... P  13   643
  1111. GetParam() ........ P  12   625
  1112. GetStartupMsg ..... F  10   619
  1113. GetSysTime() ...... P  18  1052
  1114. GotoXY() .......... P   5   303
  1115. Hash()............. F  16   971
  1116. InizializeMenu() .. P   2   120
  1117. InsLine() ......... P   5   309
  1118. IntToStr() ........ F  16   979
  1119. IsAlNum() ......... F  16   839
  1120. IsAlpha() ......... F  16   827
  1121. IsDigit() ......... F  16   833
  1122. IsLower() ......... F  16   821
  1123. IsSpace() ......... F  16   845
  1124. IsUpper() ......... F  16   815
  1125. KeyPressed() ...... F   5   316
  1126. MaxX() ............ F   5   322
  1127. MaxY() ............ F   6   329
  1128. MonthNames ........ C   6   416
  1129. NewItem() ......... P   2   135
  1130. NewMenu() ......... P   2   127
  1131. NewSubItem() ...... P   2   147
  1132. OpenConsoleDevice . P   4   230
  1133. OpenDoubleBuffer(). F   9   546
  1134. OpenMathTrans ..... F  10   596
  1135. ProgramFinished() . F  15   784
  1136. QueueRead() ....... P   3   200
  1137. RangeRandom() ..... F  14   671
  1138. ReadKey() ......... F   5   335
  1139. RealRandom ........ F  14   665
  1140. RunProgPtr ........ T  15   729
  1141. RunProgram() ...... F  15   765
  1142. RunProgramNW() .... F  15   747
  1143. RunSegment() ...... F  15   773
  1144. RunSegmentNW() .... F  15   736
  1145. SameName() ........ F  16   808
  1146. SelfSeed .......... P  14   683
  1147. SetTimer() ........ F  18  1043
  1148. StampDesc() ....... P   6   462
  1149. StrCat() .......... F  16   939
  1150. StrCmp() .......... F  16   891
  1151. StrCpy() .......... F  16   925
  1152. StrDup() .......... F  16   951
  1153. StrEq() ........... F  16   866
  1154. StrICmp() ......... F  16   899
  1155. StrIEq() .......... F  16   878
  1156. StrLen() .......... F  16   917
  1157. StrnCat() ......... F  16   945
  1158. StrnCmp() ......... F  16   905
  1159. StrnCpy() ......... F  16   932
  1160. StrnEq() .......... F  16   872
  1161. StrnICmp() ........ F  16   911
  1162. StrnIEq() ......... F  16   885
  1163. StrPos() .......... F  16   957
  1164. StrRPos() ......... F  16   964
  1165. SwapBuffers() ..... P   9   550
  1166. TextBackground() .. P   5   352
  1167. TextColor() ....... P   5   344
  1168. TimeDesc() ........ P   5   456
  1169. ToLower() ......... F  16   859
  1170. ToUpper() ......... F  16   852
  1171. UseSeed() ......... P  14   677
  1172. WaitTimer() ....... P  18  1047
  1173. WhereX() .......... F   5   358
  1174. WhereY() .......... F   5   364
  1175. WriteString() ..... P   5   370
  1176.  
  1177. Typ: F = Funktion, P = Prozedur; C = Konstante, T= Typ, V = Variable
  1178.  
  1179.  
  1180.  
  1181. Anhang B: Schlußwort des Übersetzers
  1182. ------------------------------------
  1183.  
  1184. Das wären soweit alle Funktionen, Prozeduren usw. der Includes im Verzeichnis
  1185. Utils. Diese Übersetzung ist nahezu 100 % vollständig, es wurden allerdings
  1186. ein paar wenige Sachen gekürzt oder hinzugefügt.
  1187. Dieses Docfile kam wiefolgt zustande: Zunächst wurden alle Include-Files an-
  1188. einandergehängt und in Kapitel unterteilt. Anschließend wurden sie übersetzt
  1189. (die engl. Originale sind die Include-Dateien selbst). Schließlich wurde
  1190. noch ein Inhaltsverzeichnis und ein Register angefügt.
  1191.  
  1192. Alle Angaben ohne Gewähr! - Solltet Ihr mit dem oben beschriebenen irgendwas
  1193. zerstören, seid Ihr selbst schuld, und nicht ich (der Übersetzer) !!!
  1194.  
  1195. Dieses Dok-File ist © copyright 8/93 by Stefan Grad (GPD). Verbreitung nur
  1196. gemeinsam mit dem PCQ-Pascal-Compiler erlaubt (zu den Bedingungen, die in
  1197. der zugehörigen deutschen Anleitung abgedruckt sind!). Ausgenommen davon ist
  1198. die Purity-Serie, da der PCQ-Pascal-Compiler hier schon auf der Disk-Nr. 6
  1199. zu finden ist.
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.